home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-04-07 | 3.0 KB | 138 lines | [TEXT/PJMM] |
- unit MyProgress;
-
- interface
-
- procedure PaintBarberPoll (r: rect; offset: integer);
- procedure PaintProgress (r: rect; done, total: longInt);
-
- implementation
-
- uses
- FixMath;
-
- const
- HiliteRGBP = $DA0;
-
- type
- RGBColorPtr = ^RGBColor;
-
- procedure PaintProgress (r: rect; done, total: longInt);
- var
- it: integer;
- ih: handle;
- w, uw: integer;
- oldfore: RGBColor;
- has_colorQD: boolean;
- sysEnv: SysEnvRec;
- begin
- FrameRect(r);
- InsetRect(r, 1, 1);
- with r do begin
- w := right - left;
- if total <= 0 then begin
- uw := 0;
- end
- else if done >= total then begin
- uw := w;
- end
- else begin
- uw := FracMul(w, FracDiv(done, total));
- end;
- right := left + uw;
- has_colorqd := (SysEnvirons(1, sysEnv) = noErr) & sysenv.hasColorQD; { Gestalt has a bug that causes hasColourQD to always be set }
- if has_colorQD then begin
- GetForeColor(oldfore);
- RGBForeColor(RGBColorPtr(HiliteRGBP)^);
- PaintRect(r);
- RGBForeColor(oldfore);
- end
- else
- FillRect(r, gray);
- left := right;
- right := right + w - uw;
- EraseRect(r);
- end;
- end;
-
- procedure OffsetPtr (var p: univ Ptr; offset: longint);
- inline
- $201F, (* move.l (sp)+,d0 ; pop offset *)
- $205F, (* move.l (sp)+,a0 ; pop address of p *)
- $D190; (* add.l d0,(a0) ; add offset to p *)
-
- type
- MyPicture = record
- size: integer;
- r1: rect;
- data1: array[1..17] of integer;
- r2: rect;
- nintyeight: integer;
- rowbytes: integer;
- r3: rect;
- data2: array[1..34] of integer;
- r4: rect;
- r5: rect;
- mode: integer;
- eor: integer;
- end;
- MyPicturePtr = ^MyPicture;
- MyPictureHandle = ^MyPicturePtr;
-
- procedure PaintBarberPoll (r: rect; offset: integer);
- var
- ph: MyPictureHandle;
- rb: integer;
- ts: integer;
- p: ^integer;
- i, j: integer;
- b1, b2: integer;
- o: integer;
- begin
- FrameRect(r);
- InsetRect(r, 1, 1);
- rb := (2 * (r.right - r.left) + 15) div 16 * 2;
- ts := SizeOf(MyPicture) + (r.bottom - r.top) * (rb + 2);
- ph := MyPictureHandle(NewHandle(ts));
- HLock(handle(ph));
- with ph^^ do begin
- size := ts;
- r1 := r;
- r2 := r;
- r3 := r;
- r4 := r;
- r5 := r;
- nintyeight := $0098;
- rowbytes := BOR(rb, $8000);
- mode := 0;
- StuffHex(@data1, '001102FF0C00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0001000A');
- StuffHex(@data2, '0000000000000000004800000048000000000002000100020000000000000000000000000000000000000002000000000000000000014444444444440002CCCCCCCCFFFF');
- p := @eor;
- for i := r.top to r.bottom - 1 do begin
- p^ := BOR(BSL(rb + 1, 8), rb - 1);
- OffsetPtr(p, 2);
- o := BAND((offset + i) * 2, 31);
- if o < 16 then begin
- b1 := BSR($5555AAAA, o);
- b2 := BSR($AAAA5555, o);
- end
- else begin
- b1 := BSR($AAAA5555, o - 16);
- b2 := BSR($5555AAAA, o - 16);
- end;
- for j := 1 to rb div 2 do begin
- if odd(j) then begin
- p^ := b1;
- end
- else begin
- p^ := b2;
- end;
- OffsetPtr(p, 2);
- end;
- end;
- p^ := $00FF; {end of record}
- end;
- DrawPicture(PicHandle(ph), r);
- DisposeHandle(handle(ph));
- end;
-
- end.